package singleton;

/**
 * 创建时间：2018年03月12日18:34 <br>
 * 作者：fuchaoyang <br>
 * 描述：利用枚举实现单例
 * 首先，在枚举中我们明确了构造方法限制为私有，在我们访问枚举实例时会执行构造方法，同时每个枚举实例都是static final类型的，也就表明只能被实例化一次。
 * 在调用构造方法时，我们的单例被实例化。
 * 也就是说，因为enum中的实例被保证只会被实例化一次，所以我们的INSTANCE也被保证实例化一次。
 */

public class EnumSingleTon {

  private static int type;
  private String value;

  public static void fun() {
    EnumSingleTon instance = Enum.INSTANCE.getInstance();
  }

  // 和接口一样作为内部类，强制为 static
  public /*static*/ enum Enum {
    INSTANCE;

    private EnumSingleTon mInstance;

    // 枚举的构造方法被限制为私有
    /*private*/ Enum() {
      mInstance = new EnumSingleTon();
      //type++;
    }

    public EnumSingleTon getInstance() {
      return mInstance;
    }
  }
}
